openapi: 3.0.3
info:
  version: 1.0.0
  title: DocHub backend API
  description: >
    Данный документ актуален только для развертывания в режиме Client-Server.
    В этом режиме предоставляются интеграционные API, которые вы можете использовать для 
    встраивания DocHub в свои производственные процессы.
    Подробнее тут http://dochub.info/docs/dochub.deployment
servers:
  - url: "http://localhost:3030/"
    description: Локальный сервер
tags:
- name: DataLake
  description: "API для доступа в озеро данных архитектуры"
- name: Entities
  description: "API взаимодействия с сущностями"
  externalDocs:
    url: "https://dochub.info/docs/dochub.flex_metamodel.entities"
paths:
  /core/storage/jsonata/{query}:
    get:
      tags:
      - DataLake
      summary: Выполняет произвольный запрос JSONata к данным архитектуры 
      parameters:
        - in: path
          name: query
          description: JSONata запрос в скобках "([запрос])" или идентификатор DataSet без скобок
          required: true
          schema:
            $ref: '#/components/schemas/JSONataQuery'
          example: >
            ({"id": $params.id, "limit": $params.limit, "type": $self.type, "template": $self.template})
        - in: query
          name: params
          description: > 
            JSON структура с параметрами передающаяся в запрос.
            Будет доступна в переменной $params.
          required: false
          schema:
            $ref: '#/components/schemas/JSONataParams'
          example: '{"id":"sber.rdwsoft","limit":8}'
        - in: query
          name: subject
          description: > 
            JSON структура с профилем объекта, который выполняет запрос.
            Будет доступна в переменной $self.
          required: false
          schema:
            $ref: '#/components/schemas/JSONataParams'
          example: '{"type":"markdown","template":"template.md"}'
      responses:
        "200":
          description: "Результат выполнения запроса"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JSONataResult'
  /core/storage/reload:
    put:
      tags:
      - DataLake
      summary: Выполняет запрос перезагрузки данным архитектуры
      parameters:
        - in: query
          name: secret
          description: secret для доступа к запросу. Указывается в .env переменной VUE_APP_DOCHUB_RELOAD_SECRET
          required: true
          schema:
            type: string
          example: '12345'
      responses:
        "200":
          description: "Результат выполнения запроса"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JSONataResult'
  /core/storage/release-data-profile/{path}:
    get:
      tags:
      - DataLake
      summary: >
        По указанному пути возвращает результат реализации профиля данных.
        Подробнее здесь - https://dochub.info/docs/dochub.datasets
      parameters:
        - in: path
          name: path
          description: Путь к профилю данных
          required: true
          schema:
            $ref: '#/components/schemas/PathToDataProfile'
          example: "/entities/interactions/presentations/blank"
        - in: query
          name: params
          description: > 
            JSON структура с параметрами передающаяся в запрос.
            Будет доступна в переменной $params.
          required: false
          schema:
            $ref: '#/components/schemas/JSONataParams'
          example: '{"id":"dochub.user"}'
      responses:
        "200":
          description: "Результат выполнения запроса"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JSONataResult'
  /core/storage/problems/:
    get:
      tags:
      - DataLake
      summary: Возвращает перечень обнаруженных проблем
      responses:
        "200":
          description: "Массив обнаруженных проблем"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemsResult'
  /entities/{entity}/presentations/{presentation}:
    get:
      tags:
      - Entities
      summary: Вызывает специальную (upload) презентацию сущности 
      parameters:
        - in: path
          name: entity
          description: Идентификатор сущности
          required: true
          schema:
            $ref: '#/components/schemas/EntityID'
          example: interactions
        - in: path
          name: presentation
          description: Идентификатор презентации
          required: true
          schema:
            $ref: '#/components/schemas/PresentationID'
          example: export
        - in: query
          name: id
          required: true
          description: >
            Параметр передающийся в презентацию. Зависит от самой презентации.
            Будет доступен в презентации в $params.
          schema:
            $ref: '#/components/schemas/EntityParam'
          example: dochub.user
      
      responses:
        "200":
          description: "Презентация сущности"
          content:
            application/xml:
              schema:
                $ref: '#/components/schemas/ProblemsResult'
components:
  schemas:
    JSONataQuery:
      type: string
      pattern: '^([a-zA-Z\_]*(\.[a-zA-Z\_][a-zA-Z\_]*)*)|(\(.*\))$'
    JSONataParams:
      type: string
    JSONataResult:
      type: object
    PathToDataProfile:
      type: string
      pattern: '^\/[a-zA-Z][a-zA-Z\_0-9]*(\/[a-zA-Z][a-zA-Z\_0-9]*)*$'
    EntityID: 
      type: string
      pattern: '^[a-zA-Z][a-zA-Z\_0-9]*$'
    PresentationID: 
      type: string
      pattern: '^[a-zA-Z][a-zA-Z\_0-9]*$'
    EntityParam:
      type: string
    ProblemsResult:
      type: object
      properties:
        process:
          type: object
          properties:
            startEvent:
              type: object
              title: Просмотр архитектуры
              properties:
                outgoing:
                  type: string
              required:
                - outgoing
            task:
              type: array
              title: Вход на портал
              items:
                - type: object
                  properties:
                    incoming:
                      type: string
                    outgoing:
                      type: string
                  required:
                    - incoming
                    - outgoing
                - type: object
                  properties:
                    incoming:
                      type: string
                    outgoing:
                      type: string
                  required:
                    - incoming
                    - outgoing
            sequenceFlow:
              type: array
              items:
                - type: string
            exclusiveGateway:
              type: object
              title: Информация о существующей архитектуре
              properties:
                incoming:
                  type: string
              required:
                - incoming
          required:
            - startEvent
            - task
            - sequenceFlow
            - exclusiveGateway
      required:
        - process